
public class Main{
	public static void main(String[]args){
		Monticulo monticulo=new Monticulo();
		Camino solucion=new Camino();
		
		
		
		/* Ejemplo 1 */
		System.out.println("Mapa 10x10 - profundidad:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "profundidad", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 10x10 - profundidad acotada:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "profundidadAcotada", 15, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 10x10 - profundidad acotada iterativa:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "profundidadIterativa", 15, 5, 3, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 10x10 - costo uniforme:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "costoUniforme", 0, 0, 0, "");
		System.out.println(solucion.toString3());*/
		System.out.println("Mapa 10x10 - anchura:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "anchura", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 10x10 - A* euclidea:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "A*", 0, 0, 0, "euclidea");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 10x10 - A* manhattan:");
		solucion=monticulo.busqueda("res/mapa10x10.png", new Posicion(0,0), new Posicion(9,9), "A*", 0, 0, 0, "manhattan");
		System.out.println(solucion.toString3());

		/* Ejemplo 2 */
		System.out.println("Mapa 50x50 - profundidad:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "profundidad", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 50x50 - profundidad acotada:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "profundidadAcotada", 100, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 50x50 - profundidad acotada iterativa:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "profundidadIterativa", 15, 10, 10, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 50x50 - costo uniforme:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "costoUniforme", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 50x50 - anchura:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "anchura", 0, 0, 0, "");
		//System.out.println(solucion.toString3());
		System.out.println("Mapa 50x50 - A* euclidea:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "A*", 0, 0, 0, "euclidea");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 50x50 - A* manhattan:");
		solucion=monticulo.busqueda("res/mapa50x50.png", new Posicion(0,0), new Posicion(49,49), "A*", 0, 0, 0, "manhattan");
		System.out.println(solucion.toString3());
		
		/* Ejemplo 3 */ 
		System.out.println("Mapa 100x100 - profundidad:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(99,99), "profundidad", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 100x100 - profundidad acotada:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(99,99), "profundidadAcotada", 200, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 100x100 - profundidad acotada iterativa:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(99,99), "profundidadIterativa", 25, 25, 10, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 100x100 - costo uniforme:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(99,99), "costoUniforme", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 100x100 - anchura:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(99,99), "anchura", 0, 0, 0, "");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 100x100 - A* euclidea:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(9,9), "A*", 0, 0, 0, "euclidea");
		System.out.println(solucion.toString3());
		System.out.println("Mapa 100x100 - A* manhattan:");
		solucion=monticulo.busqueda("res/mapa100x100.png", new Posicion(0,0), new Posicion(9,9), "A*", 0, 0, 0, "manhattan");
		System.out.println(solucion.toString3());*/
		
		    /* Mejora de soluciones */

		double valoracion, valColinas, valTemple;
		Camino colinas, temple;
		
		/* 10x10 -------------------------------------------------------------------------------- */
		/* Analiza una solucion dibujada en una imagen */
		System.out.println("Analizando Solucion");
		solucion=monticulo.getSolucion("res/solucion10x10.png");
		System.out.println("----------------------------\nValorando Solucion");
		valoracion=monticulo.val(solucion, "res/mapa10x10.png");
		System.out.println("Valoracion: " + valoracion);
				
		/* Se le aplica el algoritmo del ascenso de colinas */
		System.out.println("---------------------------------\nAscenso de colinas\n---------------------------------");
		colinas=monticulo.ascensoColinas("res/mapa10x10.png", solucion);
		
		valColinas=monticulo.val(colinas, "res/mapa10x10.png");
		System.out.println("Valoracion: " + valColinas);
		System.out.println(colinas.toString3());
		
		/* Se le aplica el algoritmo del temple simulado  */
		System.out.println("---------------------------------\nTemple Simulado\n---------------------------------");
		temple=monticulo.templeSimulado("res/mapa10x10.png", solucion, 4);
		
		valTemple=monticulo.val(temple, "res/mapa10x10.png");
		System.out.println("Valoracion: " + valTemple);
		System.out.println(temple.toString3());
		
		
		/* 50x50 ---------------------------------------------------------------------------- */
		/* Analiza una solucion dibujada en una imagen */
		System.out.println("Analizando Solucion");
		solucion=monticulo.getSolucion("res/solucion50x50.png");
		System.out.println("----------------------------\nValorando Solucion");
		valoracion=monticulo.val(solucion, "res/mapa50x50.png");
		System.out.println("Valoracion: " + valoracion);
		
		/* Se le aplica el algoritmo del ascenso de colinas */
		System.out.println("---------------------------------\nAscenso de colinas\n---------------------------------");
		colinas=monticulo.ascensoColinas("res/mapa50x50.png", solucion);
		
		valColinas=monticulo.val(colinas, "res/mapa50x50.png");
		System.out.println("Valoracion: " + valColinas);
		System.out.println(colinas.toString3());
		
		/* Se le aplica el algoritmo del temple simulado  */
		System.out.println("---------------------------------\nTemple Simulado\n---------------------------------");
		temple=monticulo.templeSimulado("res/mapa50x50.png", solucion, 4);
		
		valTemple=monticulo.val(temple, "res/mapa50x50.png");
		System.out.println("Valoracion: " + valTemple);
		System.out.println(temple.toString3());
		
		
		/* 100x100 ----------------------------------------------------------------------- */
		/* Analiza una solucion dibujada en una imagen */
		System.out.println("Analizando Solucion");
		solucion=monticulo.getSolucion("res/solucion100x100.png");
		System.out.println("----------------------------\nValorando Solucion");
		valoracion=monticulo.val(solucion, "res/mapa100x100.png");
		System.out.println("Valoracion: " + valoracion);
			
		/* Se le aplica el algoritmo del ascenso de colinas */
		System.out.println("---------------------------------\nAscenso de colinas\n---------------------------------");
		colinas=monticulo.ascensoColinas("res/mapa100x100.png", solucion);
		
		valColinas=monticulo.val(colinas, "res/mapa100x100.png");
		System.out.println("Valoracion: " + valColinas);
		System.out.println(colinas.toString3());
		
		/* Se le aplica el algoritmo del temple simulado  */
		System.out.println("---------------------------------\nTemple Simulado\n---------------------------------");
		temple=monticulo.templeSimulado("res/mapa100x100.png", solucion, 4);
		
		valTemple=monticulo.val(temple, "res/mapa100x100.png");
		System.out.println("Valoracion: " + valTemple);
		System.out.println(temple.toString3());
		    }	
}
